home *** CD-ROM | disk | FTP | other *** search
/ CD/PC Actual Thematic 7: Programming / CDAT7.iso / demos / VisualAge for Java 2.0 Entry / setup / data1.cab / ide-e / IDE / cache / M0S8XU (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-16  |  9.3 KB  |  397 lines

  1. package com.sun.java.swing.table;
  2.  
  3. import com.sun.java.swing.DefaultListSelectionModel;
  4. import com.sun.java.swing.ListSelectionModel;
  5. import com.sun.java.swing.event.ChangeEvent;
  6. import com.sun.java.swing.event.EventListenerList;
  7. import com.sun.java.swing.event.ListSelectionEvent;
  8. import com.sun.java.swing.event.ListSelectionListener;
  9. import com.sun.java.swing.event.TableColumnModelEvent;
  10. import com.sun.java.swing.event.TableColumnModelListener;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.beans.PropertyChangeEvent;
  14. import java.beans.PropertyChangeListener;
  15. import java.io.Serializable;
  16. import java.util.Enumeration;
  17. import java.util.Vector;
  18.  
  19. public class DefaultTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, Serializable {
  20.    protected Vector tableColumns = new Vector();
  21.    protected ListSelectionModel selectionModel;
  22.    protected int columnMargin;
  23.    protected EventListenerList listenerList = new EventListenerList();
  24.    protected transient ChangeEvent changeEvent = null;
  25.    protected boolean columnSelectionAllowed;
  26.    protected int totalColumnWidth;
  27.    static Class class$com$sun$java$swing$event$TableColumnModelListener;
  28.  
  29.    public DefaultTableColumnModel() {
  30.       this.setSelectionModel(this.createSelectionModel());
  31.       this.setColumnMargin(1);
  32.       this.setColumnSelectionAllowed(true);
  33.    }
  34.  
  35.    public void addColumn(TableColumn aColumn) {
  36.       if (aColumn == null) {
  37.          throw new IllegalArgumentException("Object is null");
  38.       } else {
  39.          this.tableColumns.addElement(aColumn);
  40.          aColumn.addPropertyChangeListener(this);
  41.          this.recalcWidthCache();
  42.          this.fireColumnAdded(new TableColumnModelEvent(this, 0, this.getColumnCount() - 1));
  43.       }
  44.    }
  45.  
  46.    public void addColumnModelListener(TableColumnModelListener x) {
  47.       EventListenerList var10000 = this.listenerList;
  48.       Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  49.       if (var10001 == null) {
  50.          try {
  51.             var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  52.          } catch (ClassNotFoundException var2) {
  53.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  54.          }
  55.  
  56.          class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  57.       }
  58.  
  59.       var10000.add(var10001, x);
  60.    }
  61.  
  62.    protected ListSelectionModel createSelectionModel() {
  63.       DefaultListSelectionModel m = new DefaultListSelectionModel();
  64.       m.setLeadAnchorNotificationEnabled(false);
  65.       return m;
  66.    }
  67.  
  68.    protected void fireColumnAdded(TableColumnModelEvent e) {
  69.       Object[] listeners = this.listenerList.getListenerList();
  70.  
  71.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  72.          Object var10000 = listeners[i];
  73.          Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  74.          if (var10001 == null) {
  75.             try {
  76.                var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  77.             } catch (ClassNotFoundException var4) {
  78.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  79.             }
  80.  
  81.             class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  82.          }
  83.  
  84.          if (var10000 == var10001) {
  85.             ((TableColumnModelListener)listeners[i + 1]).columnAdded(e);
  86.          }
  87.       }
  88.  
  89.    }
  90.  
  91.    protected void fireColumnMarginChanged() {
  92.       Object[] listeners = this.listenerList.getListenerList();
  93.  
  94.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  95.          Object var10000 = listeners[i];
  96.          Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  97.          if (var10001 == null) {
  98.             try {
  99.                var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  100.             } catch (ClassNotFoundException var3) {
  101.                throw new NoClassDefFoundError(((Throwable)var3).getMessage());
  102.             }
  103.  
  104.             class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  105.          }
  106.  
  107.          if (var10000 == var10001) {
  108.             if (this.changeEvent == null) {
  109.                this.changeEvent = new ChangeEvent(this);
  110.             }
  111.  
  112.             ((TableColumnModelListener)listeners[i + 1]).columnMarginChanged(this.changeEvent);
  113.          }
  114.       }
  115.  
  116.    }
  117.  
  118.    protected void fireColumnMoved(TableColumnModelEvent e) {
  119.       Object[] listeners = this.listenerList.getListenerList();
  120.  
  121.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  122.          Object var10000 = listeners[i];
  123.          Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  124.          if (var10001 == null) {
  125.             try {
  126.                var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  127.             } catch (ClassNotFoundException var4) {
  128.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  129.             }
  130.  
  131.             class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  132.          }
  133.  
  134.          if (var10000 == var10001) {
  135.             ((TableColumnModelListener)listeners[i + 1]).columnMoved(e);
  136.          }
  137.       }
  138.  
  139.    }
  140.  
  141.    protected void fireColumnRemoved(TableColumnModelEvent e) {
  142.       Object[] listeners = this.listenerList.getListenerList();
  143.  
  144.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  145.          Object var10000 = listeners[i];
  146.          Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  147.          if (var10001 == null) {
  148.             try {
  149.                var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  150.             } catch (ClassNotFoundException var4) {
  151.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  152.             }
  153.  
  154.             class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  155.          }
  156.  
  157.          if (var10000 == var10001) {
  158.             ((TableColumnModelListener)listeners[i + 1]).columnRemoved(e);
  159.          }
  160.       }
  161.  
  162.    }
  163.  
  164.    protected void fireColumnSelectionChanged(ListSelectionEvent e) {
  165.       Object[] listeners = this.listenerList.getListenerList();
  166.  
  167.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  168.          Object var10000 = listeners[i];
  169.          Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  170.          if (var10001 == null) {
  171.             try {
  172.                var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  173.             } catch (ClassNotFoundException var4) {
  174.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  175.             }
  176.  
  177.             class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  178.          }
  179.  
  180.          if (var10000 == var10001) {
  181.             ((TableColumnModelListener)listeners[i + 1]).columnSelectionChanged(e);
  182.          }
  183.       }
  184.  
  185.    }
  186.  
  187.    public TableColumn getColumn(int columnIndex) {
  188.       return (TableColumn)this.tableColumns.elementAt(columnIndex);
  189.    }
  190.  
  191.    public int getColumnCount() {
  192.       return this.tableColumns.size();
  193.    }
  194.  
  195.    public int getColumnIndex(Object identifier) {
  196.       if (identifier == null) {
  197.          throw new IllegalArgumentException("Identifier is null");
  198.       } else {
  199.          Enumeration enumeration = this.getColumns();
  200.  
  201.          for(int index = 0; enumeration.hasMoreElements(); ++index) {
  202.             TableColumn aColumn = (TableColumn)enumeration.nextElement();
  203.             if (identifier.equals(aColumn.getIdentifier())) {
  204.                return index;
  205.             }
  206.          }
  207.  
  208.          throw new IllegalArgumentException("Identifier not found");
  209.       }
  210.    }
  211.  
  212.    public int getColumnIndexAtX(int xPosition) {
  213.       int index = 0;
  214.       Point aPoint = new Point(xPosition, 1);
  215.       Rectangle columnRect = new Rectangle(0, 0, 0, 3);
  216.  
  217.       for(Enumeration enumeration = this.getColumns(); enumeration.hasMoreElements(); ++index) {
  218.          TableColumn aColumn = (TableColumn)enumeration.nextElement();
  219.          columnRect.width = aColumn.getWidth() + this.columnMargin;
  220.          if (columnRect.contains(aPoint)) {
  221.             return index;
  222.          }
  223.  
  224.          columnRect.x += columnRect.width;
  225.       }
  226.  
  227.       return -1;
  228.    }
  229.  
  230.    public int getColumnMargin() {
  231.       return this.columnMargin;
  232.    }
  233.  
  234.    public Enumeration getColumns() {
  235.       return this.tableColumns.elements();
  236.    }
  237.  
  238.    public boolean getColumnSelectionAllowed() {
  239.       return this.columnSelectionAllowed;
  240.    }
  241.  
  242.    public int getSelectedColumnCount() {
  243.       if (this.selectionModel != null) {
  244.          int iMin = this.selectionModel.getMinSelectionIndex();
  245.          int iMax = this.selectionModel.getMaxSelectionIndex();
  246.          int count = 0;
  247.  
  248.          for(int i = iMin; i <= iMax; ++i) {
  249.             if (this.selectionModel.isSelectedIndex(i)) {
  250.                ++count;
  251.             }
  252.          }
  253.  
  254.          return count;
  255.       } else {
  256.          return 0;
  257.       }
  258.    }
  259.  
  260.    public int[] getSelectedColumns() {
  261.       if (this.selectionModel != null) {
  262.          int iMin = this.selectionModel.getMinSelectionIndex();
  263.          int iMax = this.selectionModel.getMaxSelectionIndex();
  264.          if (iMin != -1 && iMax != -1) {
  265.             int[] rvTmp = new int[1 + (iMax - iMin)];
  266.             int n = 0;
  267.  
  268.             for(int i = iMin; i <= iMax; ++i) {
  269.                if (this.selectionModel.isSelectedIndex(i)) {
  270.                   rvTmp[n++] = i;
  271.                }
  272.             }
  273.  
  274.             int[] rv = new int[n];
  275.             System.arraycopy(rvTmp, 0, rv, 0, n);
  276.             return rv;
  277.          } else {
  278.             return new int[0];
  279.          }
  280.       } else {
  281.          return new int[0];
  282.       }
  283.    }
  284.  
  285.    public ListSelectionModel getSelectionModel() {
  286.       return this.selectionModel;
  287.    }
  288.  
  289.    public int getTotalColumnWidth() {
  290.       return this.totalColumnWidth;
  291.    }
  292.  
  293.    public void moveColumn(int columnIndex, int newIndex) {
  294.       if (columnIndex >= 0 && columnIndex < this.getColumnCount() && newIndex >= 0 && newIndex < this.getColumnCount()) {
  295.          if (columnIndex != newIndex) {
  296.             TableColumn aColumn = (TableColumn)this.tableColumns.elementAt(columnIndex);
  297.             boolean reselect = false;
  298.             if (this.selectionModel.isSelectedIndex(columnIndex)) {
  299.                this.selectionModel.removeSelectionInterval(columnIndex, columnIndex);
  300.                reselect = true;
  301.             }
  302.  
  303.             this.tableColumns.removeElementAt(columnIndex);
  304.             this.tableColumns.insertElementAt(aColumn, newIndex);
  305.             if (reselect) {
  306.                this.selectionModel.addSelectionInterval(newIndex, newIndex);
  307.             }
  308.  
  309.             this.fireColumnMoved(new TableColumnModelEvent(this, columnIndex, newIndex));
  310.          }
  311.       } else {
  312.          throw new IllegalArgumentException("moveColumn() - Index out of range");
  313.       }
  314.    }
  315.  
  316.    public void propertyChange(PropertyChangeEvent evt) {
  317.       String name = evt.getPropertyName();
  318.       if ("columWidth".equals(name)) {
  319.          this.recalcWidthCache();
  320.       } else if (!"headerValue".equals(name) && !"headerRenderer".equals(name)) {
  321.          "cellRenderer".equals(name);
  322.       }
  323.  
  324.    }
  325.  
  326.    protected void recalcWidthCache() {
  327.       Enumeration enumeration = this.getColumns();
  328.  
  329.       for(this.totalColumnWidth = 0; enumeration.hasMoreElements(); this.totalColumnWidth += ((TableColumn)enumeration.nextElement()).getWidth() + this.columnMargin) {
  330.       }
  331.  
  332.    }
  333.  
  334.    public void removeColumn(TableColumn column) {
  335.       int columnIndex = this.tableColumns.indexOf(column);
  336.       if (columnIndex != -1) {
  337.          if (this.selectionModel != null) {
  338.             this.selectionModel.removeIndexInterval(columnIndex, columnIndex);
  339.          }
  340.  
  341.          column.removePropertyChangeListener(this);
  342.          this.tableColumns.removeElementAt(columnIndex);
  343.          this.recalcWidthCache();
  344.          this.fireColumnRemoved(new TableColumnModelEvent(this, this.getColumnCount() - 1, 0));
  345.       }
  346.  
  347.    }
  348.  
  349.    public void removeColumnModelListener(TableColumnModelListener x) {
  350.       EventListenerList var10000 = this.listenerList;
  351.       Class var10001 = class$com$sun$java$swing$event$TableColumnModelListener;
  352.       if (var10001 == null) {
  353.          try {
  354.             var10001 = Class.forName("com.sun.java.swing.event.TableColumnModelListener");
  355.          } catch (ClassNotFoundException var2) {
  356.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  357.          }
  358.  
  359.          class$com$sun$java$swing$event$TableColumnModelListener = var10001;
  360.       }
  361.  
  362.       var10000.remove(var10001, x);
  363.    }
  364.  
  365.    public void setColumnMargin(int newMargin) {
  366.       if (newMargin != this.columnMargin) {
  367.          this.columnMargin = newMargin;
  368.          this.recalcWidthCache();
  369.          this.fireColumnMarginChanged();
  370.       }
  371.  
  372.    }
  373.  
  374.    public void setColumnSelectionAllowed(boolean flag) {
  375.       this.columnSelectionAllowed = flag;
  376.    }
  377.  
  378.    public void setSelectionModel(ListSelectionModel newModel) {
  379.       ListSelectionModel oldModel = this.selectionModel;
  380.       if (newModel != oldModel) {
  381.          if (oldModel != null) {
  382.             oldModel.removeListSelectionListener(this);
  383.          }
  384.  
  385.          this.selectionModel = newModel;
  386.          if (newModel != null) {
  387.             newModel.addListSelectionListener(this);
  388.          }
  389.       }
  390.  
  391.    }
  392.  
  393.    public void valueChanged(ListSelectionEvent e) {
  394.       this.fireColumnSelectionChanged(e);
  395.    }
  396. }
  397.